Script to focus on daily network properties/topology at Boat Ramp site.

Boatramp

Load PIT Tag capture and Boatramp site-specific data

##     Lake    PIT Length Sex
## 1 Parley 038305    685   M
## 2 Parley 038306    370   M
## 3 Parley 038309    740   F
## 4 Parley 038312    735   F
## 5 Parley 038314    335   M
## 6 Parley 038315    725   F
## [1] 613
##      PIT       Date        Time Antenna            DATETIME Site   Lake Length
## 1 038301 2019-07-23 22:46:00.66      A1 2019-07-23 22:46:00    B Parley    362
## 2 038301 2019-07-23 22:45:59.05      A1 2019-07-23 22:45:59    B Parley    362
## 3 038306 2019-10-03 03:32:23.84      A1 2019-10-03 03:32:23    B Parley    370
## 4 038306 2019-10-03 03:32:20.22      A1 2019-10-03 03:32:20    B Parley    370
## 5 038306 2019-10-03 04:03:20.96      A1 2019-10-03 04:03:20    B Parley    370
## 6 038306 2019-10-03 03:31:47.26      A1 2019-10-03 03:31:47    B Parley    370
##   Sex
## 1   M
## 2   M
## 3   M
## 4   M
## 5   M
## 6   M
## [1] 99

Are there any “super feeders”?

How many days out of the total number of sampling days did fish visit any of the antenna at Boat Ramp?

dates<-unique(merged_br$DATETIME) #how many dates of observation in dataset?
(min_date<-min(dates))
## [1] "2019-07-23 22:45:59 CDT"
(max_date<-max(dates))
## [1] "2019-10-29 00:06:05 CDT"
start_date<-as.POSIXct("2019-07-23 12:00:00 CDT")
end_date<-as.POSIXct("2019-10-29 12:00:00 CDT")
num_days<-as.numeric(end_date-start_date)

superfish<-data.frame(fishID=unique(merged_br$PIT), nvisit=rep(NA,length(unique(merged_br$PIT)))) 

for (i in 1:length(unique(merged_br$PIT))){
    fishID<-unique(merged_br$PIT)[i]
    visit_count<-0
    for (j in 1:num_days){
        sub_combined<-merged_br %>% filter(DATETIME >= as.POSIXct(start_date+ (j-1)*86400, tz="CDT") & DATETIME <= as.POSIXct(start_date + j*86400, tz="CDT")) #86400 seconds/24 hours
        fishID %in% sub_combined$PIT
    if(fishID %in% sub_combined$PIT){
      visit_count<-visit_count+1
    }
    }
    superfish$nvisit[i]<-visit_count
}

hist(superfish$nvisit, xlab="Number of sampling days", main="")

Daily network topology and feeder visiting behavior

network_df <-data.frame(day=1:num_days, nnodes=rep(NA,num_days), mean_degree=rep(NA, num_days), transitivity=rep(NA, num_days), edge_density=rep(NA, num_days), diameter=rep(NA, num_days), centralization=rep(NA, num_days), eigen= rep(NA, num_days), btwn= rep(NA, num_days),modularity=rep(NA, num_days))
degree_list<-NULL

for(i in 1:num_days){
  sub_combined<-merged_br %>% filter(DATETIME >= as.POSIXct(start_date+ (i-1)*86400, tz="CDT") & DATETIME <= as.POSIXct(start_date + i*86400, tz="CDT")) #86400 seconds/24 hours
  # print(sub_combined)
  

  
  edgelist<-data.frame(PIT=sub_combined$PIT, Reader=sub_combined$Antenna)
  network_df$nnodes[i]<-length(unique(sub_combined$PIT))
  
if(nrow(edgelist)>0){
  A <- spMatrix(nrow=length(unique(edgelist$PIT)),
          ncol=length(unique(edgelist$Reader)),
          i = as.numeric(factor(edgelist$PIT)),
          j = as.numeric(factor(edgelist$Reader)),
          x = rep(1, length(as.numeric(edgelist$PIT))) )
  row.names(A) <- levels(factor(edgelist$PIT))
  colnames(A) <- levels(factor(edgelist$Reader))
  
  bi<-graph.incidence(A, mode="all") #undirected, named graph that is bipartite
  pr<-bipartite.projection(bi) 
  #co-membership network of nodes ($proj1), or a network of groups that share members ($proj2)
  plot(pr$proj1, main=paste("Day =", i))
  g<- ggplot(data=sub_combined, aes(DATETIME, as.factor(PIT), color=Antenna)) +
  geom_point(alpha=0.5)
  print(g)
  
  network_df$mean_degree[i]<-mean(degree_distribution(pr$proj1))
  network_df$transitivity[i]<-transitivity(pr$proj1, "global")
  network_df$edge_density[i]<-edge_density(pr$proj1, loops=F)
  network_df$diameter[i]<-diameter(pr$proj1, directed=F, weights=NA)
  network_df$centralization[i]<-centr_degree(pr$proj1, loops=FALSE, normalized=T)$centralization
  network_df$eigen[i]<-centr_eigen(pr$proj1, directed=F, normalized=T)$centralization 
  network_df$btwn[i]<-centr_betw(pr$proj1, directed=F, normalized=T)$centralization
  network_df$modularity[i]<-modularity(pr$proj1, membership(cluster_walktrap(pr$proj1)))
  }
}

head(network_df)
##   day nnodes mean_degree transitivity edge_density diameter centralization
## 1   1      1         1.0          NaN          NaN        0            NaN
## 2   2      3         0.5          NaN    0.3333333        1            0.5
## 3   3      2         1.0          NaN    0.0000000        0            NaN
## 4   4      0          NA           NA           NA       NA             NA
## 5   5      0          NA           NA           NA       NA             NA
## 6   6      0          NA           NA           NA       NA             NA
##   eigen btwn modularity
## 1     0  NaN        0.0
## 2     1    0       -0.5
## 3   NaN  NaN        0.0
## 4    NA   NA         NA
## 5    NA   NA         NA
## 6    NA   NA         NA

Look at changes in network topology through time

plot(network_df$day, network_df$nnodes, type="l", xlab= "Sampling day", ylab="Number of nodes in daily network")
points(network_df$day, network_df$nnodes, col="red")

plot(network_df$day, network_df$edge_density, type="l", xlab= "Sampling day", ylab="Edge density")
points(network_df$day, network_df$edge_density, col="blue")

plot(network_df$day, network_df$transitivity, type="l", xlab= "Sampling day", ylab="Global transitivity")
points(network_df$day, network_df$transitivity, col="blue")

plot(network_df$day, network_df$diameter, type="l", xlab= "Sampling day", ylab="Network diameter")
points(network_df$day, network_df$diameter, col="blue")

plot(network_df$day, network_df$centralization, type="l", xlab= "Sampling day", ylab="Normalized centralization")
points(network_df$day, network_df$centralization, col="blue")

plot(network_df$day, network_df$modularity, type="l", xlab= "Sampling day", ylab="Modularity")
points(network_df$day, network_df$modularity, col="blue")

plot(network_df$day, network_df$eigen, type="l", xlab= "Sampling day", ylab="Eigenvalue centralization")
points(network_df$day, network_df$eigen, col="blue")

plot(network_df$day, network_df$btwn, type="l", xlab= "Sampling day", ylab="Betweenness centralization")
points(network_df$day, network_df$btwn, col="blue")

Time between visits

A1<-merged_br %>% filter(Antenna == "A1") 
A2<-merged_br %>% filter(Antenna == "A2")
A3<-merged_br %>% filter(Antenna == "A2") 

length(unique(A1$PIT))
## [1] 67
length(unique(A2$PIT))
## [1] 83
length(unique(A3$PIT))
## [1] 83

Next steps:

  • Lagged association rates (LAR)- Whitehead, H. (1995) Investigating structure and temporal scale in social organizations using identified individuals. Behavioral Ecology, 6, 199– 208.
  • asnipe package
  • Damien Farine’s work in finches?
  • Ben Sheldon’s work on great tits?